原帖 | Jason | 2026-08-05 17:02 | 👍0 | 阅读约1
在 RK 平台做 MIPI CSI 摄像头驱动移植,会有几类问题:
1、Sensor 识别不到,probe 失败
1. I2C:确认是 7bit 地址,I2C 总线配置正确,compatible 字符串设备树和驱动必须完全对上
2. 电源:AVDD/DOVDD/DVDD 各路供电电压要符合 Sensor 规格
3. 复位引脚:RESET、PWDN 电平时序,上电延时是否给够
4. MCLK 时钟有没有正常输出
5. pinctrl 有没有冲突,模组排线有没有接反、接触不良
6. 确认 Sensor 没有卡在 standby 或者复位状态
先保证 I2C 能读到 Sensor ID,过了 probe 这一步,再往下走(RK3566 全流程实战见 RK3566 MIPI-CSI移植)。
2、probe 成功,但 media‑ctl 看不到链路
1. port、endpoint 配置,remote‑endpoint 双向互相引用断了
2. data‑lanes 设备树两端(sensor端、dphy端)配置必须一致
3. csi/dphy/isp 节点 status 要设为 okay
4. camera‑module‑index 不要出现冲突
5. sensor 子设备是否完成 async 注册
3、media 链路正常,v4l2‑ctl 抓图 timeout
1. s_stream 回调是否真正执行 stream‑on
2. sensor 初始化寄存器序列是否完整,很多人漏写部分寄存器
3. MIPI lane 数量、link_freq、pixel_rate 和Sensor 输出规格严格匹配
4. bus_fmt、bpp 配置正确,DPHY 节点对接无误
5. 优先打开 sensor test‑pattern,区分是sensor 硬件没出数据,还是后端接收问题。test pattern 能出,说明 RK 接收侧没问题,问题落在 sensor 配置、硬件排线。
4、抓图报CRC / ECC / FIFO / MIPI报错
这类报错 90% 是信号质量、时序、硬件配置问题:
- MIPI 速率太高,信号质量扛不住
- FPC 排线过长、阻抗不连续;lane 顺序、lane 极性接错
- data‑lanes 设备树配置和硬件实际不一致
- 收发两端 VC 虚拟通道号不匹配
- HTS/VTS、pixel clock 配置错误
- 电源噪声大,MCLK 抖动超标,PCB 差分走线不规范
快速定位手段
1. 降低分辨率、降低帧率、降低 MIPI 速率
2. 减少 lane 测试:4lane 改成 2lane、2lane改成 1lane,定位是否某一路 lane 异常
3. 开启 sensor test pattern,排除模组硬件
4. 更换短排线;示波器测 MCLK、电源;抓取 MIPI 眼图看信号质量
5、图像偏色(一般是偏绿)
1. Bayer 顺序:RGGB/BGGR/GRBG/GBRG,设备树 media bus format 一定要和sensor 输出匹配,这里错直接颜色错乱
2. IQ 文件匹配当前 sensor 与镜头
3. AWB/CCM 算法是否正常工作
4. 如果开启 mirror/flip,部分 sensor 需要同步调整 Bayer 顺序
6、图像全黑/过暗
1. 曝光、增益寄存器配置是否正确
2. exp_def 不能大于 vts_def,否则曝光无法生效
3. V4L2_CID_EXPOSURE 控制是否生效
4. RKAIQ/3A 有没有正常启动,没跑 3A 容易黑屏发暗
5. 硬件层面:镜头盖、光圈、红外滤光片,检查物理进光是否正常
实操调试小经验
1. 调试顺序:I2C 读 ID → media 拓扑链路 → test‑pattern 自测 → 真实图像,按顺序排查,不要跳步骤。
2. 出现 MIPI 报错,优先降速、减 lane 做二分法,快速区分软件配置还是硬件信号问题。
3. 很多坑不是代码逻辑bug,是设备树、引脚时序、供电、排线硬件细节。
相关笔记
- 📁 返回本主题 MOC
- RK3566 MIPI-CSI移植
- 从MCU转Linux BSP开发
- 嵌入式Linux调试iic
- Linux 驱动踩坑案例:compatible 匹配上
- 老师,学习Android Camera架构时
- Linux Android GT911触控调试